// 1、字面量
//   缺陷 无法扩展原型方法 （）
var user1 = {
    name: "tom",
    age: 23,
    fun: function () { }
};
// 2、构造函数
//   实现原型方法的扩展
//   无法保证所有基于该构造器的对象都包含定义的原型方法
var UserA = function () {
    this.name = "tom";
    this.age = 23;
};
UserA.prototype.show = function () { };
var user2 = new UserA();
user2.print();
UserA.prototype.print = function () { };
// 3、闭包构造函数
//    将构造函数的定义 整合到一个自动执行的方法中
//    保证对象构造函数的完整性
var UserB = (function () {
    var UserB = function () {
        this.name = "tom";
        this.age = 23;
    };
    UserB.prototype.show = function () { };
    UserB.prototype.print = function () { };
    return UserB;
})();
var user3 = new UserB();
/*
    TS 的非严格语法模式下。上述三种对象构建方式被保留
    TS 针对于 JS 的闭包构造函数进行的语法简化
        class 对象构造器名称 {
            属性名=默认值
            方法名(){}
        }
    面向对象的语法中：类 就是 JS中的 对象构造函数
    ==> 定义的 类 是可以作为变量类型使用的
*/
var UserC = /** @class */ (function () {
    function UserC() {
        this.name = "tom";
        this.age = 23;
    }
    UserC.prototype.print = function () {
        console.log("print");
    };
    UserC.prototype.show = function () {
        console.log("show");
    };
    return UserC;
}());
var user4 = new UserC();
var user5 = new UserC();
